#ifndef MESSAGES
#define MESSAGES

class CellModel;

/** 
 * class Message
 * Ancestor of all messages 
 * message can be varius request for data
 * or computation
 */
class Message {

};




/* other specified messages */

//**********************************************************
//   MESSAGES CELLSOLVER TO CELL
//**********************************************************


/** 
 * Message for cell to recompute its specific particle position 
 */
class MUpdateParticlePosition: public Message {
public:
	int particleId;
	int cellId;
	double x;
	double y;
	double z;

};


/**
 * Message for updating particle external force
 */
class MUpdateParticleExternalForce: public Message {
public:
	int particleId;
	int cellId;
	double fx;
	double fy;
	double fz;

};


//*********************************************************
//    MESSAGES CELL TO CELLSOLVER
//*********************************************************

/** 
 * Message - cell asks to recompute new position of 
 * specified particle 
 */
class MComputeNewParticlePosition: public Message {
public:
	int particleId;
	int cellId;
	CellModel * cellModel;

	double x;
	double y;
	double z;

	double fx;
	double fy;
	double fz;

	double vx;
	double vy;
	double vz;

	double step;

};


/** 
 * request to recompute external force applied to 
 * one particle
 */
class MComputeExternalForce: public Message {
public:
	int particleId;
	int cellId;
	CellModel * cellModel;
};


#endif //MESSAGES